<?php
 
  /** Le ClassLoader de l'application.
	 * Permet de charger automatiquement les classes utilisee.
	 * @author Sebastian Mosser
	 * @date 2006
	 * @version 1.0
 	 */
   
   
	/// Chemin d'acces au noyau oriente objet de Balloon
	$localClassPath =  BALLOON_FS_PATH . "kernel/"; 
	
	// Sous repertoires du noyau a tester, dans l'ordre :
	$classDirs = array();
	$classDirs[] = "abstract/"  ;
	$classDirs[] = "classes/"   ;	
	$classDirs[] = "exception/" ;
	$classDirs[] = "herited/"   ;
	$classDirs[] = "interfaces/";
	$classDirs[] = "singleton/" ;
	$classDirs[] = "static/"    ;
	$classDirs[] = "3rdParty/"  ;
		
	
	/** Determine si une classe existe dans le systeme
	 * @param $classname le nom de la classe a tester
	 */
	function classExists($classname) {
		global $localClassPath, $classDirs;
		// Les classes normales sont traitées prioritairement :
		foreach ($classDirs as $key => $value) {
			$file = $localClassPath . $value .$classname.".php";
			if (file_exists($file))
				return True;
		}
		// Est-ce un service alors ?
		$file = getcwd() . "/classes/". $classname.".php";
		if (file_exists($file))
			return True;
		// Les classes locales sont traitée en dernier recours :
		$file = getcwd()."/".$classname.".php";
		if (file_exists($file))
			return True;
		return False;
	}
	
	
	/** Fonction de classLoading automatique
	 * @param $classname le nom de la classe a charger (contenue dans un .php)
	 */
	function __autoload($classname) {
		global $localClassPath, $classDirs;
		
		// Les classes normales sont traitées prioritairement :
		foreach ($classDirs as $key => $value) {
			$file = $localClassPath . $value .$classname.".php";
			if (file_exists($file)) {
				require_once($file);
				return;
			}
		}
		
		// Est-ce un service alors ?
		$file = getcwd() . "/classes/". $classname.".php";
		if (file_exists($file)) {
			require_once($file);
			return;
		}
		
		// Les classes locales sont traitées en dernier recours :
		$file = getcwd()."/".$classname.".php";
		if (file_exists($file)) {
			require_once($file);
			return;
		}

		$error = "[Ballon::ERROR] : the class [".$classname."] doesn't exist !";
		$exc = new Exception($error);
		print(nl2br($exc->__toString()));
		throw $exc;
	}

?>